﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices.WindowsRuntime;
using System.Text;
using System.Threading.Tasks;
using StyleMVVM.Data.Activation;

namespace StyleMVVM.DependencyInjection
{
	/// <summary>
	/// This interface represents the way to activate an export, be it IExportStrategy or some other custom way of defining a value
	/// </summary>
	public interface IExportActivator
	{
		/// <summary>
		/// The activation container associated with this container
		/// </summary>
		IDependencyInjectionContainer Container { get; set; }

		/// <summary>
		/// The activation service this Export should use.
		/// </summary>
		IActivationService ActivationService { get; set; }

		/// <summary>
		/// Activate an instance of the object
		/// </summary>
		/// <param name="injectionContext">injection context</param>
		/// <param name="constructorParams">parameters to pass to the constructor</param>
		/// <returns>instance</returns>
		object Activate(IInjectionContext injectionContext, [ReadOnlyArray] object[] constructorParams);
	}
}